package eteam.aps.mapper;

import eteam.aps.model.dto.ArrivalVouchDto;
import eteam.aps.model.dto.ArrivalVouchUpdateDto;
import eteam.aps.model.entity.arrival.ArrivalVouch;
import eteam.aps.model.export.query.InventoryQuery;
import eteam.aps.model.vo.arrival.ArrivalVouchShowVo;
import eteam.aps.model.vo.arrival.ArrivalVouchVo;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;
import java.util.Map;

/**
 * 到货单;U8到货单 持久层
 *
 * @author LiuLei
 */
@Mapper
public interface ArrivalVouchMapper {

    /**
     * 保存 到货但信息
     *
     * @param arrivalVouch 到货单
     * @return 保存的条数
     */
    int saveArrival(ArrivalVouch arrivalVouch);

    /**
     * 保存 到货但信息
     *
     * @param list 到货单
     * @return 保存的条数
     */
    int saveArrivalList(List<ArrivalVouch> list);

    /**
     * 查询到货单信息
     *
     * @param map 查询条件
     * @return 到货单信息
     */
    ArrivalVouchShowVo getOneByBar(Map<String, Object> map);

    /**
     * 查询到货单信息
     *
     * @param map 根据单据查询到货单信息
     * @return 到货单信息集
     */
    @MapKey("fBarCode")
    Map<String, ArrivalVouchShowVo> getOneByCode(Map<String, Object> map);

    /**
     * 修改到货单信息
     *
     * @param list 到货单 集
     * @return 修改的 条数
     */
    int updateAvByArrivalVouchUpdateDto(List<ArrivalVouchUpdateDto> list);

    /**
     * 条件查询到货单总数据
     *
     * @param map 查询条件
     * @return 总数
     */
    int selCount(Map<String, Object> map);

    /**
     * 条件查询到货单信息
     *
     * @param map 查询条件
     * @return 到货单信息
     */
    List<ArrivalVouchShowVo> selJsp(Map<String, Object> map);

    /**
     * 条件查询到货单信息
     *
     * @param map 查询条件
     * @return 到货单
     */
    List<ArrivalVouch> getOneByPurBarCode(Map<String, Object> map);

    /**
     * 根据 批量修改到货单
     *
     * @param list 到货单条码信息 参数
     * @return 修改的条数
     */
    int updateAvByBarCodeLis(List<ArrivalVouchDto> list);

    /**
     * 条件查询到货单信息
     *
     * @param map 查询条件
     * @return 到货单
     */
    ArrivalVouch getOneByProConsumerBarCode(Map<String, Object> map);

    /**
     * 获取到货单列表
     *
     * @param map 到货单单据查询
     * @return 到货单集
     */
    List<ArrivalVouchVo> getArLisByPurCode(Map<String, Object> map);


    /**
     * 撤销到货单合格状态
     *
     * @param map 修改条件
     */
    void updateAvByFid(Map<String, Object> map);

    /**
     * 根据mergeBar升序查询第一条到货单修改数量
     *
     * @param update 修改条件
     * @return 修改条数
     */
    int updateAvFFinStockQuantityByFirstBarCode(List<Map<String, Object>> update);

    /**
     * 根据合并条码集查询所有的拆分条码
     *
     * @param query 合并条码集
     * @return 到货单信息
     */
    List<ArrivalVouch> selectAllByMergeBarList(Map<String,Object> query);

    /**
     * 根据合并条码集查询所有的拆分条码
     *
     * @param query 合并条码集
     * @return 到货单信息
     */
    List<ArrivalVouchVo> selectAllByMergeBarVOList(Map<String,Object> query);

//    List<ArrivalRep> getRepository(Map<String, Object> map);

    List<ArrivalVouch> getRepository(Map<String, Object> map);

    int getRepositoryCount(Map<String, Object> map);

    String selectArrivalBarCodeById(String fId);

    List<ArrivalVouch> selectArrivalInvAndBatch(InventoryQuery query);
}
